/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package GestionJornada;

import gestionJDBC.gestorJDBC;
import java.sql.*;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.ArrayList;
/**
 *
 * @author Raul Garcia Pedrosa
 */
public class JornadaDB {
    
    private static gestorJDBC gestor=gestorJDBC.getInstance();
    /*
     * 
     * Devuelve la jornada de una temporada
     */
    
    public Jornada getJornada(int id_temporada,int n_jornada){
        ResultSet rs;
        Jornada j=null;
        
        rs=gestor.Consultar("Select q.id_jornada,q.fecha_inicio,q.fecha_fin,q.numero_jornada from jornada q,temporada_contiene_jornadas p where p.id_temporada='"
                             +id_temporada+"' and q.numero_jornada='"+n_jornada+"' and p.id_jornada=q.id_jornada");
        try {
            while(rs.next()){ 
                j=new Jornada();
                j.setId((Integer) rs.getObject("q.id_jornada"));
                if(rs.getObject("q.fecha_inicio")!=null){
                  j.setFecha_init((String) rs.getObject("q.fecha_inicio"));
                }
                if(rs.getObject("q.fecha_fin")!=null){
                   j.setFecha_fin((String) rs.getObject("q.fecha_fin"));
                }
                j.setNumero_jornada((Integer) rs.getObject("q.numero_jornada"));
                
                
            }
        } catch (SQLException ex) {
            Logger.getLogger(JornadaDB.class.getName()).log(Level.SEVERE, null, ex);
        }
        return j;
    }
    /*
     * Devuelve los paratidos de una jornada j
     */
    public ArrayList<Partidos> getPartidos(Jornada j){
        
        ResultSet rs;
        ArrayList<Partidos> partidos =new ArrayList<Partidos> (50);
        int i=0;
        
        rs=gestor.Consultar("Select p.id_partido,p.id_local,p.id_visitante,p.fecha,p.hora,p.puntos_local"+
                " ,p.puntos_visitante from partidos p,partido_pertenece_jornada q where p.id_partido=q.id_partido and q.id_jornada='"
                +j.getId()+"'");
        try {
            while(rs.next()){
                Partidos p= new Partidos();
                p.setId_partido((Integer) rs.getObject("p.id_partido"));
                p.setId_local((Integer) rs.getObject("p.id_local"));
                p.setId_visitante((Integer) rs.getObject("p.id_visitante"));
               
                p.setFecha((String) rs.getObject("p.fecha"));
                p.setHora((String) rs.getObject("p.hora"));
                p.setPuntos_local((Integer) rs.getObject("p.puntos_local"));
                p.setPuntos_visitante((Integer) rs.getObject("p.puntos_visitante"));
                partidos.add(i,p);
                i++;
            }
        } catch (SQLException ex) {
            Logger.getLogger(JornadaDB.class.getName()).log(Level.SEVERE, null, ex);
        }
        
      
        return partidos;
    }
    /**
     * 
     * @param id_temporada : Temporada en la qie queremos buscar
     * @return : devuelve el nombre de la jornadas (numero de jornada)
     */
    public ArrayList<Integer> getNombreJornadas(int id_temporada){
        
        ResultSet rs;
        ArrayList<Integer> nombres =new ArrayList<Integer>(50);
        int i=0;
        
  
        
        rs=gestor.Consultar("Select q.numero_jornada from jornada q,temporada_contiene_jornadas p where "+
                "p.id_jornada=q.id_jornada and p.id_temporada='"+id_temporada+"'");
        try {
            while(rs.next()){
                nombres.add(i,(Integer)rs.getObject("q.numero_jornada"));
                i++;
            }
        } catch (SQLException ex) {
            Logger.getLogger(JornadaDB.class.getName()).log(Level.SEVERE, null, ex);
        }
        
        return nombres;
         
            }
    
    /*
     * Devuelve los objetos jornada de una temporada
     */
    public ArrayList<Jornada> getJornadas (int id_temporada){
        
        ResultSet rs;
        ArrayList<Jornada> jornadas =new ArrayList<Jornada>();
        Jornada jor = null;        
        
        rs=gestor.Consultar("SELECT * FROM jornada j,temporada_contiene_jornadas t WHERE j.id_jornada=t.id_jornada AND "+
                            "t.id_temporada='"+id_temporada+"'");
        try {
            while(rs.next()){
                jor = new Jornada();
                jor.setId((Integer)rs.getObject("id_jornada"));
                //jor.setFecha_init(rs.getObject("fecha_inicio").toString());
                //jor.setFecha_fin(rs.getObject("fecha_fin").toString());
                jor.setNumero_jornada((Integer)rs.getObject("numero_jornada"));
                
                jornadas.add(jor);
            }
        } catch (SQLException ex) {
            Logger.getLogger(JornadaDB.class.getName()).log(Level.SEVERE, null, ex);
        }
        
        return jornadas;
    }
    /*
     * Establece los partidos de una jornada
     */
    
    public boolean setPartidos(Jornada j,ArrayList<Partidos> p){
        
        ResultSet rs;
        int id=0;
        boolean exito=false;
        
        rs=gestor.Consultar("Select * from partidos");
        try {
            while(rs.next()){
                id++;
            }
        } catch (SQLException ex) {
            Logger.getLogger(JornadaDB.class.getName()).log(Level.SEVERE, null, ex);
        }
        for(int i=0;i<p.size();i++){
            p.get(i).setId_partido(id);
            exito=gestor.Insertar("Insert into partidos values ('"+p.get(i).getId_partido()
                    +"','"+p.get(i).getId_local()+"','"+p.get(i).getId_visitante()+"',null,null,'"+
                    p.get(i).getPuntos_local()+"','"+p.get(i).getPuntos_visitante()+"')");
            
            if(exito==true){
                exito=gestor.Insertar("Insert into partido_pertenece_jornada values ('"+
                        p.get(i).getId_partido()+"','"+j.getId()+"')");
            }
           id++;
            
        }
        return exito;
    }
    /**
     * Establece el resultado de un partido
     * 
     */
    
    public boolean setResultado (int id_partido,int puntos_local,int puntos_visitante){
        
        boolean exito=false;
        
        exito=gestor.Modificar("Update partidos set puntos_local='"+puntos_local+"',puntos_visitante='"+puntos_visitante
                +"' where id_partido='"+id_partido+"'");
        
        return exito;
    }
    
    /**
     * Modifica la fecha de inicio y de fin de una jornada
     * 
     */
    public boolean ModificarJornada(Jornada j,String fecha_inic,String fecha_fin){
        
        boolean exito=false;
        ResultSet rs;
        
        exito=gestor.Modificar("Update jornada set fecha_inicio='"+
                fecha_inic+"',fecha_fin='"+fecha_fin+"' where id_jornada='"+j.getId()+"'");
    
       return exito;    
    }
    
    public int getNumJornada (int id_jornada){
        ResultSet rs;
        int num_jor=-1;
        
        rs = gestor.Consultar("SELECT numero_jornada from jornada WHERE id_jornada ='"+id_jornada+"'");
        
        try {
            while(rs.next()){
                num_jor = (Integer) rs.getObject("numero_jornada");        
            }
            
        }catch (SQLException ex) {
            Logger.getLogger(JornadaDB.class.getName()).log(Level.SEVERE, null, ex);
        }
        
        return num_jor;
    }
}
